package com.lfs.market.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lfs.market.model.R;
import com.lfs.market.model.dto.ProductInfoDto;
import com.lfs.market.model.dto.ProductInfoPageDto;
import com.lfs.market.model.dto.SystemAddProductDto;
import com.lfs.market.model.dto.SystemProductInfoPageDto;
import com.lfs.market.model.entity.ProductInfo;
import com.lfs.market.model.vo.*;

import java.util.List;
import java.util.Map;


public interface ProductInfoService extends IService<ProductInfo> {
    /**
     * 发布商品，并创建订单
     *
     * @param dto
     * @return
     */
    R createProductInfo(ProductInfoDto dto);

    List<ProductInfoPageVo> getProductList(ProductInfoPageDto pageDto);


    /**
     * 根据商品id查询商品详细信息
     *
     * @param productId
     * @return
     */
    ProductInfoDetailVo getProductInfo(String productId);


    /**
     * 获取已经发布的商品
     *
     * @return
     */
    List<ProductInfo> getMyProductInfoList();


    /**
     * 想要人数+1
     *
     * @param productId
     * @return
     */
    void createLikeCount(String productId);

    /**
     * 查询商品列表
     *
     * @param dto
     * @return
     */
    Page getProductInfoList(SystemProductInfoPageDto dto);

    /**
     * 获取商品详情
     *
     * @param id
     * @return
     */
    Map getDetail(String id);

    /**
     * 我的收藏
     *
     * @return
     */
    List<ProductInfo> getMyProductCollectInfo();


    /**
     * 商品审核通过
     *
     * @param id
     * @return
     */
    void passProduct(String id);

    Long getTodayCount();


    Long getMonthCount();


    /**
     * 商品审核失败
     *
     * @param id
     * @return
     */
    void failProduct(String id);

    /**
     * 下架商品
     *
     * @param id
     * @return
     */
    void downProduct(String id);

    List<ProductInfoPageVo> getPriceProductList(ProductInfoPageDto pageDto);

    UserStatVo getUserStat();

    /**
     * 商品卖出
     *
     * @param productId
     * @return
     */
    void productSoldOut(String productId);

    /**
     * 查询商品订单的统计信息
     *
     * @return
     */
    ProductOrderStatVo getProductOrderList();

    /**
     * 查询已买入的商品信息
     *
     * @return
     */
    List<BuyProductVo> getMyBuy();

    /**
     * 查询已经卖出的商品信息
     *
     * @return
     */
    List<SellProductVo> getMySell();

    /**
     * 添加商品
     *
     * @param productDto
     * @return
     */
    R addProduct(SystemAddProductDto productDto);

    /**
     * 根据ids删除商品信息
     *
     * @param ids
     */
    R deleteProductInfo(List<String> ids);

    /**
     * 编辑商品信息
     *
     * @param productDto
     * @return
     */
    R editProduct(SystemAddProductDto productDto);

    /**
     * 动态列表
     *
     * @return
     */
    List<ProductInfoTrendVo> active();

    /**
     * 查询订单信息
     *
     * @return
     */
    List<OrderProductVo> getMyOrder();

    /**
     * 不带价格查询商品
     *
     * @param pageDto
     * @return
     */
    List<ProductInfoPageVo> getPriceProduct(ProductInfoPageDto pageDto);

    /**
     * 查询在两个价格之间的商品
     *
     * @param pageDto
     * @return
     */
    List<ProductInfoPageVo> getPriceBetweenProduct(ProductInfoPageDto pageDto);

    /**
     * 查询大于等于StartPrice的商品
     *
     * @param pageDto
     * @return
     */
    List<ProductInfoPageVo> getStartPriceProduct(ProductInfoPageDto pageDto);

    /**
     * 小于等于EndPrice的商品
     *
     * @param pageDto
     * @return
     */
    List<ProductInfoPageVo> getEndPriceProduct(ProductInfoPageDto pageDto);

    Integer getTodayNewProductsCount();

    Integer getMonthNewProductsCount();

    /**
     * 查询统计商品数据
     *
     * @return
     */
    Map getCountData();
}
